import numpy as np


def bisearch(fun, start_v=1, eps=1e-5) -> list:
    if fun(0) > 0:
        lb, ub = -start_v, 0
        while fun(lb) > 0:
            ub = lb
            lb *= 2
    else:
        lb, ub = 0, start_v
        while fun(ub) < 0:
            lb = ub
            ub *= 2
    while (ub - lb > eps):
        mid = np.mean([lb, ub])
        mv = fun(mid)
        if mv > 0:
            ub = mid
        else:
            lb = mid
    return [lb, ub]
